# 模型和数据库
from .exts import db
# 模型   ->    数据库
# 类   ->   表结构
# 类属性   ->   表字段
# 对象  ->   表的一行数据

# 新建模型 model 类
class User(db.Model):
    # 表名
    __tablename__ = 'tb_user'
    # 定义表字段
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(30), unique=True, index=True)
    age = db.Column(db.Integer, default=1)
    sex=db.Column(db.Boolean, default=True)
    salary = db.Column(db.Float, default=10000, nullable=False)

    def __repr__(self):
        return self.name



# db.Column : 表示字段
# db.Integer : 表示整数
# primary_key=True : 主键
# autoincrement=True : 自增
# db.String(30) : varchar(30) 可变字符串
# unique : 唯一约束
# index=True : 普通索引
# nullable=Flase: 是否可为空



# 创建多对多关系的models
# 以学生和班级表为例
# 班级表
class Grade(db.Model):
    __tablename__ = 'tb_grade'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(30), unique=True, index=True)

    students = db.relationship('Student', backref='grade', lazy='dynamic')

# 学生表
class Student(db.Model):
    __tablename__ = 'tb_student'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(30), unique=True, index=True)
    age = db.Column(db.Integer, default=10, nullable=False)

    # 设置外键, 关联班级表的id
    gradeid = db.Column(db.Integer, db.ForeignKey(Grade.id), nullable=False)




# ---------------------多对多---------------- #
# 用户收藏电影
# 用户 : 电影 = N : M


collect = db.Table(
          'collect',
          db.Column('user_id',db.Integer, db.ForeignKey('usermodel.id'),primary_key=True),
          db.Column('movie_id',db.Integer, db.ForeignKey('movie.id'),primary_key=True)
         )



class UserModel(db.Model):
    __tablename__ = 'usermodel'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(30), unique=True)
    age = db.Column(db.Integer, default=10)


# 电影表
class Movie(db.Model):
    __tablename__ = 'movie'
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    name = db.Column(db.String(30))
    # secondary=collect  设置中间表
    users = db.relationship('UserModel', backref='movies', lazy='dynamic', secondary=collect)